#pragma once

#include <string>
#include <list>
#include <vector>
#include <iostream>
#include <queue>

using namespace std;

class Bricks {
public:
    void pushToBricks(string brick);
    bool solve();
    Bricks(string str);
    void printResult();
private:
    list<string> bricks; //список кубиков
    vector<vector<int>> graph; //будем хранить граф как матрицу смежности для быстрой проверки наличия ребра между вершинами
    void build();
    bool canCreateNewFlow(const vector<vector<int>>& residualGraph, vector<int>& parent);
    int maxFlow();
    string word; //слово, которое требуется составить
    vector<bool> path;
    vector<int> result;
};